在前面的文章我們簡單認識的 Mifare Classic 1k 卡片後,我們來聊聊中國魔術卡這個神奇的小東東吧,但由於筆者只有研究 Mifare Classic 1k 的中國魔術卡,所以這篇文章也只會介紹這類中國魔術卡。
不知道大家還記不記得,Mifare Classic 1k 的 Sector 0 Block 0 是製造商區塊 (Manufacturer block),這個區塊會在製造時寫入一個唯讀的資料,通常用來存放卡片的「UID」、「ATQA」、「SAK」及製造商資料。
然後就開始有一些讀卡機廠商,就選擇只讀取卡片的「UID」、「ATQA」、「SAK」來進行存取控制,如果在白名單內就能開門之類的動作,而沒有去讀取卡片的其他內容。
會做出這樣的決定,通常是有很多因素造成的,例如:開發讀卡機的開發者沒有很注重這塊的安全性、為了相容別人發行的 M1 卡片…等。
但使用者肯定也會因為各種原因需要拷貝卡片,例如:租房子的時候只有一張卡片,所以需要拷貝一張給親友;怕卡片弄丟所以多拷貝一張卡片備份…等。
當我們想要拷貝卡片時,如果卡片製造商區塊無法修改,我們就沒辦法把製造商區塊複製到另一張卡片,我們也很難特別去找到一張製造商區塊完全相同的卡片。換句話說,使用者沒辦法在這類只讀取卡片「UID」、「ATQA」、「SAK」的讀卡機上使用拷貝的卡片。
於是就有卡片的製造廠商,幫卡片加上可以修改製造商區塊的功能,由於這類卡片最早在中國大陸出現,在國外把這種卡片簡稱 Chinese Magic Card,中文翻譯過來就是中國魔術卡。
在中國大陸通常把這種卡片稱為「IC 白卡」、「UID 卡」、「拷貝卡」,而英文語系的人通常把這種卡片稱為「Gen1a」。這類卡片有提供後門指令,只要使用後門指令後,就可以無視存取控制來讀寫任何資料。目前市面上有很多這類卡片的變種,有的變種也會偷工減料,例如不支援 increment/decrement/restore/transfer
指令(會導致無法模擬成部份卡片)。由於這種卡片問世的時間最早,所以很多讀卡機都會故意發送後門指令來偵測這類卡片。
但這個卡片的後門指令不是所有讀卡機都支援,Android 及 iPhone 手機也都不支援,所以可能會需要使用一些特別的讀卡機才能修改,如果讀者有 Proxmark3 這個讀卡機的話,可以透過 hf mf csetuid
指令來修改卡片的「UID」、「ATQA」、「SAK」。
在中國大陸通常把這種卡片稱為「CUID 卡」、「防火牆卡」,而英文語系的人通常把這種卡片稱為「Gen2」、「Direct Write」。這種卡片沒有提供可以無視存取控制的後門指令,但這種卡片的製造商區塊,只要在經過 Sector 0 的存取權限驗證後,就可以直接修改來達成修改「UID」、「ATQA」、「SAK」的目的,但這種卡片如果資料不小心寫錯,該 Sector 就會變成無法讀寫(俗稱變磚)。目前市面上有很多這類卡片的變種,例如:只能修改一次製造商區塊的「FUID 卡」,以及執行後門指令後製造商區塊就被鎖定的「UFUID 卡」。由於這種卡片問世的時間比第一代晚,所以能偵測這類卡片的讀卡機相對較少,但這種卡片也很容易偵測,只要讀卡機故意修改製造商區塊就可以來偵測這類卡片。
這種卡片對於智慧型手機的相容度很高,因為修改的指令就跟卡片的寫入指令相同,例如 Android 的 MIFARE Classic Tool 就支援這類卡片的修改。